#include  "Timer.h"
#include  "delay.h"
#include  "uart.h"
/***************************------初始化Timer0-----**********************************/    
void InitTimer0()
{
/*
**选择工作模式
*/				   // T1	      ||		 T0
// 89H  TMOD    GATE  C/~T  M1  M0  GATE  C/~T  M1  M0 
// 8EH  AUXR  T0x12 T1x12 UART_12/2 T2R T2_C/T T2x12 EXTRAN  S1ST2 
//--------------------------------------------------------------------------------//
#if T0_MD ==  0		     // 方式0   13定时器   若作定时需要手动重载
    TMOD &= 0xF0;		 // 设置定时器模式	 (8192-time_regular)*12/FOSC 
    TL0   = 0 ;			 // 建议不要使用该模式
    TH0   = 0 ;
//--------------------------------------------------------------------------------//
// 方式1   // 最长定时时长为 70 ms 	  //	最短  为  1 us
#elif T0_MD == 1		//使用定时器0 方式1   16位定时器  若作定时需要手动重载
	AUXR &= 0x7F;		//定时器0时钟12T模式   (15系列必须要这条指令)

	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式

	TL0 = (u8)(65536-(TIMER0_REGULAR/1000.0)*(FOSC/12000.0)) ;
	TH0 = (u16)(65536-(TIMER0_REGULAR/1000.0)*(FOSC/12000.0))>> 8 ;

	TF0 = 0;		    //清除TF0标志
	TR0 = 1;		    //定时器0开始计时
//--------------------------------------------------------------------------------//
// 方式2   // 最长定时时长为 278us 	  //	最短  为  1 us
#elif T0_MD == 2		// 使用定时器0 方式2  8自动重载 
                                        				
	AUXR &= 0x7F;		//定时器0时钟12T模式

	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x02;		//设置定时器模式
		    
	TL0 = (u8)(256-(TIMER0_REGULAR/1000.0)*(FOSC/12000.0)) ;
	TH0 = (u16)(256-(TIMER0_REGULAR/1000.0)*(FOSC/12000.0))>> 8 ;
	TF0 = 0;		    //清除TF0标志
	TR0 = 1;		    //定时器0开始计时
//--------------------------------------------------------------------------------//
#else
#endif 
}

//----Timer0中断服务程序------------//
void timer0_isr() interrupt 1 using 1
{ 
  static u16 count0;
//    static u16 count1;
//      static u16 count2;

//--------------------------------------------------------------------------------//
#if T0_MD == 1						// 16位定时器  若作定时需要手动重载
	TL0 = (u8)(65536-(TIMER0_REGULAR/1000.0)*(FOSC/12000.0)) ;
	TH0 = (u16)(65536-(TIMER0_REGULAR/1000.0)*(FOSC/12000.0))>> 8 ;

#elif T0_MD == 2				   // 8位定时器 虽说是自动重载 但是实验发现 还是要手动重载一下才能正常运行 
	TL0 = (u8)(256-(TIMER0_REGULAR/1000.0)*(FOSC/12000.0)) ;
	TH0 = (u16)(256-(TIMER0_REGULAR/1000.0)*(FOSC/12000.0))>> 8 ;
#else
#endif 
//--------------------------------------------------------------------------------//								   
  if(count0 == 100)
    { 
     count0 = 0 ;
	 ultra_check_flag = ~ultra_check_flag;
    }
    count0++;
}


/***************************------初始化Timer1-----**********************************/	
void InitTimer1()
{
/*
**选择工作模式
*/				   // T1	      ||		 T0
// 89H  TMOD    GATE  C/~T  M1  M0  GATE  C/~T  M1  M0 
// 8EH AUXR  T0x12 T1x12 UART_12/2 T2R T2_C/T T2x12 EXTRAN  S1ST2 
//--------------------------------------------------------------------------------//
#if T1_MD ==  0		     // 方式0   13定时器   若作定时需要手动重载
    TMOD &= 0x0f;		 // 设置定时器模式	 (8192-time_regular)*12/FOSC 
    TL1   = 0 ;			 // 建议不要使用该模式
    TH1   = 0 ;
//--------------------------------------------------------------------------------//
// 方式1   // 最长定时时长为 70 ms 	  //	最短  为  1 us
#elif T1_MD == 1		//使用定时器1 方式1   16位定时器  若作定时需要手动重载
	AUXR &= 0xbf;		//定时器1时钟12T模式   (15系列必须要这条指令)

	TMOD &= 0x0F;		//设置定时器1模式
	TMOD |= 0x10;		//设置定时器1模式	方式1

	TL1 = 0 ;
	TH1 = 0 ;

	TF1 = 0;		    //清除TF0标志
//	TR1 = 1;		    //定时器0开始计时
//--------------------------------------------------------------------------------//
// 方式2   // 最长定时时长为 278us 	  //	最短  为  1 us
#elif T1_MD == 2		// 使用定时器1 方式2  8自动重载 
                                        				
	AUXR &= 0xbf;		//定时器1时钟12T模式

	TMOD &= 0x0F;		//设置定时器1模式
	TMOD |= 0x20;		//设置定时器1模式  方式2
		    
	TL1 = (u8)(256-(TIMER1_REGULAR/1000.0)*(FOSC/12000.0)) ;
	TH1 = (u16)(256-(TIMER1_REGULAR/1000.0)*(FOSC/12000.0))>> 8 ;
	TF1 = 0;		    //清除TF0标志
	TR1 = 1;		    //定时器0开始计时
//--------------------------------------------------------------------------------//
#else
#endif 
}

//-------------------------------Timer1中断服务程序-------------------------------//
void timer1_isr() interrupt 3 using 1
{ 
//  static u16 count0;
//---------------------------重载定时器-------------------------------------------//
#if T1_MD == 1						// 16位定时器  若作定时需要手动重载
	TL1 =0 ;
	TH1 =0 ;

#elif T1_MD == 2				   // 8位定时器 虽说是自动重载 但是实验发现 还是要手动重载一下才能正常运行 
	TL1 = (u8)(256-(TIMER1_REGULAR/1000.0)*(FOSC/12000.0)) ;
	TH1 = (u16)(256-(TIMER1_REGULAR/1000.0)*(FOSC/12000.0))>> 8 ;
#else
#endif 
//-----------------------------服务程序--------------------------------------------//
     sr04_over_flag = 1;
}